package org.bulldog.playlist;

import org.bulldog.playlist.util.DateUtil;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 播表定时计划 不提供外部直接调用
 *
 * @author zhanghongbin
 * @version 1.0
 */
class PlayListTimerTask {

    private static Timer timer;

    //时间间隔(一天)
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

    static {
        timer = new Timer("timer-playlist", true);
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    timer.cancel();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }, "timer-playlist-shutdown"));
    }

    private PlayListTimerTask() {

    }

    static final void execute(TimerTask timerTask) {
        timer.schedule(timerTask, getDate(), PERIOD_DAY);
    }

    private static Date getDate() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, 0); //凌晨0点
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        Date date = calendar.getTime();
        //如果第一次执行定时任务的时间 小于当前的时间
        //此时要在 第一次执行定时任务的时间加一天，以便此任务在下个时间点执行。如果不加一天，任务会立即执行。
        if (date.before(new Date())) {
            date = DateUtil.add(date, 1);
        }
        return date;
    }
}
